python wx模块 您所在的位置:网站首页 python wx教程 python wx模块

python wx模块

2022-05-30 18:18| 来源: 网络整理| 查看: 265

  不说废话,直接奔正题。

  python版本是python2.7,需要的模块有argparse,easygui,wx。

 

  主界面如下图(非常丑见谅!)

  代码如下:

# !coding=gbk #author:zichen

import wx, os import easygui import threading import argparse  from Queue import Queue import pinger

class Host_is_alive_Frame(wx.Frame):     def __init__(self):                  self.q = Queue()         self.list_values = []         self.count = 0         self.gauge_value = 0         self.sum = 1                  wx.Frame.__init__(self, None, -1, "主机存活探测工具".decode("gbk"), size=(600, 400), style=wx.DEFAULT_FRAME_STYLE ^ wx.RESIZE_BORDER ^ wx.MAXIMIZE_BOX)         panel = wx.Panel(self, -1)         wx.StaticText(panel, -1, "Ping:", pos=(4, 6))                  #########设置字体##########         # font = wx.Font(12, wx.DECORATIVE, wx.NORMAL, wx.NORMAL)         # ping_Label.SetFont(font)                  #################输入文本框###################         self.basicText = wx.TextCtrl(panel, -1, "127.0.0.1", pos=(35, 4), size=(160, -1))         self.basicText.SetInsertionPoint(0)                  ############动态改变文本框的内容#################         self.Bind(wx.EVT_TEXT_ENTER, self.bt_value, self.basicText)                   ###########添加按钮############         self.button_add = wx.Button(panel, -1, "添加".decode("gbk"), pos=(200, 2), size=(40, -1))         self.Bind(wx.EVT_BUTTON, self.On_add_Clik, self.button_add)         self.button_add.SetDefault()                  ##########加载文件按钮############         self.button_load_file = wx.Button(panel, -1, "加载文件".decode("gbk"), pos=(245, 2), size=(80, -1))         self.Bind(wx.EVT_BUTTON, self.On_load_file_Clik, self.button_load_file)         self.button_load_file.SetDefault()                  ##############清除按钮#############         self.button_clear = wx.Button(panel, -1, "清除".decode("gbk"), pos=(330, 2), size=(80, -1))         self.Bind(wx.EVT_BUTTON, self.On_clear_Clik, self.button_clear)         self.button_clear.SetDefault()                  ##############下拉框###############         wx.StaticText(panel, -1, "线程数:".decode("gbk"), pos=(415, 8))         # thread_Label.SetFont(font)         sampleList = ["10", "50", "100", "200", "500"]         self.thread_num = wx.Choice(panel, -1, pos=(460, 4), choices=sampleList)                  ##############开始按钮##############         self.button_action = wx.Button(panel, -1, "开始探测".decode("gbk"), pos=(515, 2), size=(80, -1))         self.Bind(wx.EVT_BUTTON, self.On_action_Clik, self.button_action)         self.button_action.SetDefault()                  #################输入文本框###################         self.multiText1 = wx.TextCtrl(panel, -1, "", pos=(50, 50), size=(200, 270), style=wx.TE_MULTILINE)  # 创建一个文本控件         self.multiText1.SetInsertionPoint(1)  # 设置插入点                  #################输出文本框###################         self.multiText2 = wx.TextCtrl(panel, -1, "", pos=(300, 50), size=(200, 270), style=wx.TE_MULTILINE)  # 创建一个文本控件         self.multiText2.SetInsertionPoint(2)  # 设置插入点                  #################进度条##################         self.gauge_text = wx.StaticText(panel, -1, "进度条:".decode("gbk"), pos=(0, 343))         self.gauge = wx.Gauge(panel, -1, 100, pos=(45, 340), size=(500, 25))         self.gauge.SetBezelFace(3)         self.gauge.SetShadowWidth(3)         self.Bind(wx.EVT_IDLE, self.OnIdle)         self.info = wx.TextCtrl(panel, -1, "0%".decode("gbk"), pos=(550, 345), style=wx.TE_READONLY | wx.TE_MULTILINE | wx.BORDER_NONE | wx.BRUSHSTYLE_TRANSPARENT)         self.info.SetBackgroundColour(panel.BackgroundColour)              # 进度条函数         def OnIdle(self, event):         self.gauge_value = self.count * 100 / self.sum         print "self.gauge_value:" + str(self.gauge_value)         self.gauge.SetValue(self.gauge_value)         # self.gauge.Update()         self.info.SetValue(str(self.gauge_value) + "%")         # self.info.Update()              # 添加按钮函数     def On_add_Clik(self, event):         self.button_add.SetLabel("添加".decode("gbk"))         #######队列去重#######         if self.bt_value() not in self.list_values:             self.list_values.append(self.bt_value())             if self.multiText1.GetValue() == "":                 self.multiText1.SetValue(self.bt_value())             else:                 self.multiText1.AppendText("\n" + self.bt_value())         else:             # 消息对话框             dlg = wx.MessageDialog(None, '输入的内容有重复的值,已自动去重'.decode("gbk"), '警告'.decode("gbk"), wx.OK | wx.ICON_QUESTION)             dlg.ShowModal()             dlg.Destroy()

    # 加载文件按钮函数     def On_load_file_Clik(self, event):         self.button_load_file.SetLabel("加载文件".decode("gbk"))         file_path = easygui.fileopenbox(default='*.txt')         with open(file_path) as old_file:             os.path.basename(file_path)             text = old_file.read()             if "\r" in text:                 temp_lists = (text.split("\r"))             elif "\n" in text:                 temp_lists = (text.split("\n"))             else:                 pass             for temp_list in temp_lists:                 if temp_list not in self.list_values:                     self.list_values.append(temp_list)                     if self.multiText1.GetValue() == "":                         self.multiText1.SetValue(temp_list)                     else:                         self.multiText1.AppendText("\n" + temp_list)                 else:                     # 消息对话框                     dlg = wx.MessageDialog(None, '输入的内容有重复的值,已自动去重'.decode("gbk"), '警告'.decode("gbk"), wx.OK | wx.ICON_QUESTION)                     dlg.ShowModal()                     dlg.Destroy()          # 清除文本框1的函数     def On_clear_Clik(self, event):         self.multiText1.Clear()         self.list_values = []         self.count = 0          # 执行探测函数     def On_action_Clik(self, event):         self.button_action.SetLabel("开始探测".decode("gbk"))         # 清除文本框2         self.multiText2.Clear()                  thread_nums = self.thread_num.GetStringSelection()         for list_value in self.list_values:             self.q.put(str(list_value))         # 开始多线程         if thread_nums == "":             thread_nums = "10"             dlg = wx.MessageDialog(None, '已将线程数默认设置成10'.decode("gbk"), '警告'.decode("gbk"), wx.OK | wx.ICON_QUESTION)             dlg.ShowModal()             dlg.Destroy()         threads = []         for thread_num in range(0, int(thread_nums)):             threads.append(threading.Thread(target=self.thread_ping, args=(thread_num,)))                      for thread in threads:             thread.start()

    # 多线程函数                def thread_ping(self, num):         while True:             if not self.q.empty():                 str_value = self.q.get()                 self.sum = len(self.list_values)                 self.count = self.count + 1                 """执行ping命令                 ping_echo = os.popen("ping " + str_value + " -n 1")                 content = ping_echo.read()                 if "TTL" in content:                     print str_value                     if self.multiText2.GetValue()=="":                         self.multiText2.SetValue(str_value)                     else:                             self.multiText2.AppendText("\r" + str_value)"""                 # stock编程 使用了s0nnet编写的程序                 parser = argparse.ArgumentParser(description='Python ping')                 parser.add_argument('--target-host', action="store", dest="target_host", required=True)                 given_args = '--target-host'                   target_host = str_value                 pinger_value = pinger.Pinger(target_host=target_host)                 flag = pinger_value.ping()                 if True == flag:                     if self.multiText2.GetValue() == "":                         self.multiText2.SetValue(str_value)                         self.multiText2.Update()                     else:                             self.multiText2.AppendText("\r" + str_value)                         self.multiText2.Update()                 continue             # panel.Update()             break          # 返回输入框的值                 def bt_value(self):         return self.basicText.GetValue()

if __name__ == '__main__':     app = wx.App(False)     frame = Host_is_alive_Frame()     frame.Show()     app.MainLoop()

pinger的程序是采用的GitHub 的s0nnet写icmp  stock编程链接如下(这里感谢一下s0nnet):

https://github.com/Lingerhk/hacking_script/blob/master/net_attacking/icmp_ping_tool.py

有部分地方改动了一下:

ICMP_ECHO_REQUEST = 8  # Platform specific DEFAULT_TIMEOUT = 0.3 DEFAULT_COUNT = 1

 

    def ping(self):         """         Run the ping process         """         for i in xrange(self.count):             # print "Ping to %s..." % self.target_host,             try:                 delay = self.ping_once()             except socket.gaierror, e:                 # print "Ping failed. (socket error: '%s')" % e[1]                 return False                 break                   if delay == None:                 # print "Ping failed. (timeout within %ssec.)" % self.timeout                 return False             else:                 # 输出主机存活的信息                 # delay = delay * 1000                 # print "Get pong in %0.4fms" % delay                 return True

 

  wx,光是界面的调整就浪费了我很多时间,我接下来就不会深入的学习wx,如果有人对wx感兴趣的话,可以查看wx的中文文档,下载链接如下:

https://pan.baidu.com/s/1jX6W2au_aAZdSjqS4jy2rA

 

 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有